﻿using System.Windows.Controls;

namespace WPFTestSolution.Pages.Controls {
    /**
     * https://www.bilibili.com/video/BV1bV411A7Eq?p=27
     * 027-Control基类
     * 
     * Control是许多控件的基类。
     * 比如最常见的按钮（Button）、单选(RadioButton)、复选（CheckBox）、文本框（TextBox）、ListBox、DataGrid、日期控件等等。
     * 这些控件通常用于展示程序的数据或获取用户输入的数据，我们可以将这一类型的控件称为内容控件或数据控件，
     * 它们与前面的布局控件有一定的区别，布局控件更专注于界面，而内容控件更专注于数据（业务）。
     * 
     * Control类虽然可以实例化，但是在界面上是不会有任何显示的。
     * 只有那些继承了Control的子类（控件）才会在界面上显示，而且所呈现的样子各不相同，为什么会是这样呢？
     * 
     * 因为Control类提供了一个控件模板（ControlTemplate），而几乎所有的子类都对这个ControlTemplate进行了各自的实现，
     * 所以在呈现子类时，我们才会看到Button拥有Button的样子，TextBox拥有TextBox的样子。
     *
     * 属性	                    说明
     * FontStyle	            获取或设置控件的字体结构，类似于Word中字体的常规、斜体或倾斜
     * FontStretch	            获取或设置紧缩或在屏幕上展开一种字体的程度。
     * FontSize	                获取或设置字体大小。
     * FontFamily	            获取或设置控件的字体系列。如：微软雅黑 = "Microsoft YaHei UI"
     * Foreground	            获取或设置控件的字体颜色，也就是所谓的前景色画笔，它是一个刷子（Brush）
     * Background	            获取或设置一个用于描述控件的背景画笔。
     * BorderThickness	        获取或设置控件的边框宽度。
     * IsTabStop	            获取或设置一个值，该值指示控件是否包括在选项卡上的导航窗格中。
     * VerticalContentAlignment	获取或设置控件的内容的垂直对齐方式。
     * TabIndex                 获取或设置一个值，确定当用户导航控件通过使用 TAB 键元素接收焦点的顺序。
     * Padding                  获取或设置在控件中的填充量。
     * Template                 获取或设置控件模板。
     * FontWeight	            获取或设置指定的字体粗细。
     * BorderBrush	            获取或设置一个用于描述一个控件的边框背景画笔。
     * HorizontalContentAlignment	获取或设置控件的内容的水平对齐方式。
     *
     *
     * 
     * 事件
     * 在这一小节里，您只要能明白Template的概念就行了。除了这个属性，Control类还提供了两个事件，它们分别是PreviewMouseDoubleClick和MouseDoubleClick。
     * 事件名称	                说明
     * PreviewMouseDoubleClick	表示鼠标双击或多次单击时触发的事件
     * MouseDoubleClick	        表示鼠标双击或多次单击时触发的事件
     *
     * 以Preview开头的事件叫隧道事件或预览事件，而MouseDoubleClick没有以Preview开头，所以它叫冒泡事件。
     * WPF的前端代码其实是一棵树，当我们在某个目标控件上进行鼠标操作时，所引发的事件有两个方向，
     * 一是从Window根节点一直路由到目标控件上，看起来就好像是从外面一直沿着这棵树路由引发至里面，这就像我们开车进入隧道一样，所以Preview开头的事件叫隧道事件。
     * 
     * 冒泡事件事件的路由方向相反，是从目标控件位置开始，一直路由引发至最外层的Window窗体。
     * 
     * 关于路由事件，我们会在后面拿一章节专门讲解，这里只提一下这个概念。
     * 通常，我们并不会直接实例化Control基类，确实这样做对我们实际帮助不大，我们要使用的——是它膝下各个子控件，
     * 而在这众多的子控件中，Button是最常见最简单的控件了。
     * 不过，Button的基类是ButtonBase，ButtonBase的基类是ContentControl，ContentControl的基类是Control。
     * 如果我们要探讨Button控件，看样子必须要先介绍一下ContentControl基类和ButtonBase基类才行了。
     */
    public partial class _27_Control_Demo_Page : Page {
        public _27_Control_Demo_Page() {
            InitializeComponent();
            this.Title = "027-Control基类";
        }
    }
}